home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / jce.jar / javax / crypto / SealedObject.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-07-27  |  3.9 KB  |  187 lines

  1. package javax.crypto;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8. import java.io.Serializable;
  9. import java.security.AlgorithmParameters;
  10. import java.security.InvalidAlgorithmParameterException;
  11. import java.security.InvalidKeyException;
  12. import java.security.Key;
  13. import java.security.NoSuchAlgorithmException;
  14. import java.security.NoSuchProviderException;
  15.  
  16. public class SealedObject implements Serializable {
  17.    static final long serialVersionUID = 4482838265551344752L;
  18.    private byte[] encryptedContent = null;
  19.    private String sealAlg = null;
  20.    private String paramsAlg = null;
  21.    protected byte[] encodedParams = null;
  22.  
  23.    public SealedObject(Serializable var1, Cipher var2) throws IOException, IllegalBlockSizeException {
  24.       ByteArrayOutputStream var3 = new ByteArrayOutputStream();
  25.       ObjectOutputStream var4 = new ObjectOutputStream(var3);
  26.  
  27.       byte[] var5;
  28.       try {
  29.          var4.writeObject(var1);
  30.          var4.flush();
  31.          var5 = var3.toByteArray();
  32.       } finally {
  33.          var4.close();
  34.       }
  35.  
  36.       try {
  37.          this.encryptedContent = var2.doFinal(var5);
  38.       } catch (BadPaddingException var9) {
  39.       }
  40.  
  41.       if (var2.getParameters() != null) {
  42.          this.encodedParams = var2.getParameters().getEncoded();
  43.          this.paramsAlg = var2.getParameters().getAlgorithm();
  44.       }
  45.  
  46.       this.sealAlg = var2.getAlgorithm();
  47.    }
  48.  
  49.    protected SealedObject(SealedObject var1) {
  50.       this.encryptedContent = (byte[])var1.encryptedContent.clone();
  51.       this.sealAlg = var1.sealAlg;
  52.       this.paramsAlg = var1.paramsAlg;
  53.       if (var1.encodedParams != null) {
  54.          this.encodedParams = (byte[])var1.encodedParams.clone();
  55.       } else {
  56.          this.encodedParams = null;
  57.       }
  58.  
  59.    }
  60.  
  61.    public final String getAlgorithm() {
  62.       return this.sealAlg;
  63.    }
  64.  
  65.    public final Object getObject(Key var1) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, InvalidKeyException {
  66.       if (var1 == null) {
  67.          throw new NullPointerException("key is null");
  68.       } else {
  69.          try {
  70.             return this.unseal(var1, (String)null);
  71.          } catch (NoSuchProviderException var3) {
  72.             throw new NoSuchAlgorithmException("algorithm not found");
  73.          } catch (IllegalBlockSizeException var4) {
  74.             throw new InvalidKeyException(((Throwable)var4).getMessage());
  75.          } catch (BadPaddingException var5) {
  76.             throw new InvalidKeyException(((Throwable)var5).getMessage());
  77.          }
  78.       }
  79.    }
  80.  
  81.    public final Object getObject(Cipher var1) throws IOException, ClassNotFoundException, IllegalBlockSizeException, BadPaddingException {
  82.       byte[] var2 = var1.doFinal(this.encryptedContent);
  83.       ByteArrayInputStream var3 = new ByteArrayInputStream(var2);
  84.       SunJCE_i var4 = new SunJCE_i(var3);
  85.  
  86.       Object var6;
  87.       try {
  88.          Object var5 = var4.readObject();
  89.          var6 = var5;
  90.       } finally {
  91.          var4.close();
  92.       }
  93.  
  94.       return var6;
  95.    }
  96.  
  97.    public final Object getObject(Key var1, String var2) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException {
  98.       if (var1 == null) {
  99.          throw new NullPointerException("key is null");
  100.       } else if (var2 != null && var2.length() != 0) {
  101.          try {
  102.             return this.unseal(var1, var2);
  103.          } catch (IllegalBlockSizeException var4) {
  104.             throw new InvalidKeyException(((Throwable)var4).getMessage());
  105.          } catch (BadPaddingException var5) {
  106.             throw new InvalidKeyException(((Throwable)var5).getMessage());
  107.          }
  108.       } else {
  109.          throw new IllegalArgumentException("missing provider");
  110.       }
  111.    }
  112.  
  113.    private Object unseal(Key var1, String var2) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
  114.       AlgorithmParameters var3 = null;
  115.       if (this.encodedParams != null) {
  116.          try {
  117.             if (var2 != null) {
  118.                var3 = AlgorithmParameters.getInstance(this.paramsAlg, var2);
  119.             } else {
  120.                var3 = AlgorithmParameters.getInstance(this.paramsAlg);
  121.             }
  122.          } catch (NoSuchProviderException var20) {
  123.             if (var2 == null) {
  124.                throw new NoSuchAlgorithmException(this.paramsAlg + " not found");
  125.             }
  126.  
  127.             throw new NoSuchProviderException(var20.getMessage());
  128.          }
  129.  
  130.          var3.init(this.encodedParams);
  131.       }
  132.  
  133.       Cipher var4;
  134.       try {
  135.          if (var2 != null) {
  136.             var4 = Cipher.getInstance(this.sealAlg, var2);
  137.          } else {
  138.             var4 = Cipher.getInstance(this.sealAlg);
  139.          }
  140.       } catch (NoSuchPaddingException var18) {
  141.          throw new NoSuchAlgorithmException("Padding that was used in sealing operation not available");
  142.       } catch (NoSuchProviderException var19) {
  143.          if (var2 == null) {
  144.             throw new NoSuchAlgorithmException(this.sealAlg + " not found");
  145.          }
  146.  
  147.          throw new NoSuchProviderException(var19.getMessage());
  148.       }
  149.  
  150.       try {
  151.          if (var3 != null) {
  152.             var4.init(2, var1, var3);
  153.          } else {
  154.             var4.init(2, var1);
  155.          }
  156.       } catch (InvalidAlgorithmParameterException var17) {
  157.          throw new RuntimeException(var17.getMessage());
  158.       }
  159.  
  160.       byte[] var5 = var4.doFinal(this.encryptedContent);
  161.       ByteArrayInputStream var6 = new ByteArrayInputStream(var5);
  162.       SunJCE_i var7 = new SunJCE_i(var6);
  163.  
  164.       Object var9;
  165.       try {
  166.          Object var8 = var7.readObject();
  167.          var9 = var8;
  168.       } finally {
  169.          var7.close();
  170.       }
  171.  
  172.       return var9;
  173.    }
  174.  
  175.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  176.       var1.defaultReadObject();
  177.       if (this.encryptedContent != null) {
  178.          this.encryptedContent = (byte[])this.encryptedContent.clone();
  179.       }
  180.  
  181.       if (this.encodedParams != null) {
  182.          this.encodedParams = (byte[])this.encodedParams.clone();
  183.       }
  184.  
  185.    }
  186. }
  187.